package com.fire.control.system.module.duty.service;

import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.RequestBody;

import com.fire.control.system.dto.UserDTO;
import com.fire.control.system.dto.app.AppDutySignVo;
import com.fire.control.system.standard.BusinessInterfaceStandard;
import com.fire.control.system.support.protocol.comman.ResponseProtocol;
import com.fire.control.system.support.protocol.duty.DutyRequestProtocol;
import com.fire.control.system.support.protocol.duty.LeaveDutyRequestProtocol;
import com.fire.control.system.support.protocol.duty.SignRequestProtocol;

/**
 * @author liuxincheng
 * @ClassName: ISignService
 * @Description: TODO(签到服务)
 * @date 2017年6月1日 下午2:38:35
 */
public interface IDutyService extends BusinessInterfaceStandard<DutyRequestProtocol, ResponseProtocol> {
	
	/**
	* @Title: dutyDetection
	* @Description: TODO(定时更新当日值班缺勤的人员数据)
	* @author wanbo
	* @date  2017年6月30日 下午6:56:39
	*/
	public void updateTodayDutyNoAttendance();

	/**
	 * @author  liuxincheng
	 * @Title: jumpToSignPage
	 * @Description: TODO(跳转到签到页面)
	 * @param @param requestProtocol
	 * @param @return    设定文件
	 * @return ResponseProtocol    返回类型
	 * @throws null 
	 */
	public ResponseProtocol jumpToSignPage(SignRequestProtocol requestProtocol,UserDTO user);
	
	/**
	 * @author liuxincheng
	 * @Title: signDataFetch
	 * @Description: TODO(签到确定)
	 * @param @param requestProtocol
	 * @param @return    设定文件
	 * @return ResponseProtocol    返回类型
	 * @throws null
	 */
	public ResponseProtocol confirmSign(SignRequestProtocol requestProtocol,UserDTO user);
	/**
	 * @author  liuxincheng
	 * @Title: confirmFlushData
	 * @Description: TODO(签到并刷新数据)
	 * @param @param requestProtocol
	 * @param @return    设定文件
	 * @return ResponseProtocol    返回类型
	 * @throws null
	 */
	public ResponseProtocol signDataFetch(SignRequestProtocol requestProtocol,UserDTO user);
	
	/**
	 * @author  liuxincheng
	 * @Title: patchSignIn
	 * @Description: TODO(补签到)
	 * @param @param requestProtocol
	 * @param @return    设定文件
	 * @return ResponseProtocol    返回类型
	 * @throws null  
	 */
	public ResponseProtocol patchSignIn(SignRequestProtocol requestProtocol,UserDTO user);
	
	/**
	 * @author liuxincheng
	 * @Title: workRecord
	 * @Description: TODO(工作记录)
	 * @param @param requestProtocol
	 * @param @param user
	 * @param @return    设定文件
	 * @return ResponseProtocol    返回类型
	 * @throws
	 */
	public ResponseProtocol workRecord(SignRequestProtocol requestProtocol,UserDTO user);
	
	/**
	 * @author  liuxincheng
	 * @Title: dutyLeave
	 * @Description: TODO(请假)
	 * @param @param requestProtocol
	 * @param @return    设定文件
	 * @return ResponseProtocol    返回类型
	 * @throws null signInList
	 */
	public ResponseProtocol dutyLeave(DutyRequestProtocol requestProtocol);
	
	/**
	 * @author  liuxincheng
	 * @Title: signInList
	 * @Description: TODO(签到列表数据获取)
	 * @param @param requestProtocol
	 * @param @return    设定文件
	 * @return ResponseProtocol    返回类型
	 * @throws null
	 */
	public ResponseProtocol signInList(DutyRequestProtocol requestProtocol,Pageable p);
	
	
	
	/**
	 * @author  liuxincheng
	 * @Title: dutySheet
	 * @Description: TODO(值班表)
	 * @param @param requestProtocol
	 * @param @return    设定文件
	 * @return ResponseProtocol    返回类型
	 * @throws null getDutySheetByCondition
	 */
	public ResponseProtocol dutySheet(SignRequestProtocol requestProtocol,UserDTO userDTO);
	
	/********************************WEB端************************************************/
	
	/**
	 * @author liuxincheng
	 * @Title: jumpToDutySheetPage
	 * @Description: TODO(跳到值班列表页面)
	 * @param @param requestProtocol
	 * @param @return    设定文件
	 * @return ResponseProtocol    返回类型
	 * @throws null
	 */
	public ResponseProtocol jumpToDutySheetPage(DutyRequestProtocol requestProtocol);
	
	/**
	 * @author liuxincheng
	 * @Title: getDutySheetByCondition
	 * @Description: TODO(根据条件获得值班列表)
	 * @param @param requestProtocol
	 * @param @param p
	 * @param @return    设定文件
	 * @return ResponseProtocol    返回类型
	 * @throws null
	 */
	public ResponseProtocol getDutySheetByCondition(LeaveDutyRequestProtocol requestProtocol);
	
	/**
	 * @author liuxincheng
	 * @Title: jumpToUpdatePage
	 * @Description: TODO(跳到修改值班信息页面)
	 * @param @param requestProtocol
	 * @param @return    设定文件
	 * @return ResponseProtocol    返回类型
	 * @throws null
	 */
	public ResponseProtocol jumpToUpdatePage(DutyRequestProtocol requestProtocol,UserDTO user);
	
	/**
	 * @author liuxincheng
	 * @Title: addDutyInfo
	 * @Description: TODO(添加值班人员信息)
	 * @param @param requestProtocol
	 * @param @return    设定文件
	 * @return ResponseProtocol    返回类型
	 * @throws
	 */
	public ResponseProtocol addDutyInfo(DutyRequestProtocol requestProtocol);
	
	
	/**
	 * @author liuxincheng
	 * @Title: updateDutyInfomation
	 * @Description: TODO(修改值班信息)
	 * @param @param requestProtocol
	 * @param @return    设定文件
	 * @return ResponseProtocol    返回类型
	 * @throws null
	 */
	public ResponseProtocol updateDutyInfomation(DutyRequestProtocol requestProtocol);
	
	/**
	 * @author liuxincheng
	 * @Title: deleteDutyInfomation
	 * @Description: TODO(删除值班信息)
	 * @param @param requestProtocol
	 * @param @return    设定文件
	 * @return ResponseProtocol    返回类型
	 * @throws null
	 */
	public ResponseProtocol deleteDutyInfomation(DutyRequestProtocol requestProtocol);

	public ResponseProtocol addDutyLeave(LeaveDutyRequestProtocol leaveDutyRequestProtocol,UserDTO user);

	public ResponseProtocol updateDutyLeaveStatus(LeaveDutyRequestProtocol leaveDutyRequestProtocol);

	public ResponseProtocol findDutyLeaveList(LeaveDutyRequestProtocol leaveDutyRequestProtocol);

	public ResponseProtocol findSignList(LeaveDutyRequestProtocol leaveDutyRequestProtocol);

	public ResponseProtocol updateDutyLeaveStatusByIds(LeaveDutyRequestProtocol leaveDutyRequestProtocol);

	public ResponseProtocol updateSignStatusById(LeaveDutyRequestProtocol leaveDutyRequestProtocol);

	public ResponseProtocol updateSignStatusByIds(LeaveDutyRequestProtocol leaveDutyRequestProtocol);

	public ResponseProtocol addOrUpdateDutyInfo(LeaveDutyRequestProtocol leaveDutyRequestProtocol);

	public ResponseProtocol getDutyEmptyByUserId(LeaveDutyRequestProtocol leaveDutyRequestProtocol);

	public ResponseProtocol findDutyList(LeaveDutyRequestProtocol leaveDutyRequestProtocol);

	public ResponseProtocol editDutyInfoByUserIdAnddutyMonth(LeaveDutyRequestProtocol leaveDutyRequestProtocol);
}
